/**
 * 给定一个有限的Iterable（数组是Iterable），或一个Iterable产生承诺（或承诺和值的混合）的一个承诺,
 * 将 中的所有值迭代Iterable到一个数组中，并使用给定的函数将该数组映射到另一个数组。
 * mapper等待函数返回的mapperPromise，并且在所有映射的 Promise 也都实现之前，返回的 Promise 不会实现。
 * 如果数组中的任何 Promise 被拒绝，或者mapper函数返回的任何 Promise 被拒绝，则返回的 Promise 也会被拒绝。
 * 给定项目的映射器函数会被尽快调用，也就是说，当该项目在输入数组中的索引的承诺得到满足时。
 * 这并不意味着结果数组具有随机顺序的项目，这意味着它.map可以用于并发协调，不像.all.的
 * 一个常见用途Promise.map是替换.push+Promise.all样板：
 */
const Promise = require('bluebird'); 
var promises = [];
 for (var i = 0; i < fileNames.length; ++i) {
     promises.push(fs.readFileAsync(fileNames[i]));
 }
 Promise.all(promises).then(function() {
     console.log("done");
 });
 
 // Using Promise.map:
 Promise.map(fileNames, function(fileName) {
     // Promise.map awaits for returned promises as well.
     return fs.readFileAsync(fileName);
 }).then(function() {
     console.log("done");
 });
 
//  // Using Promise.map and async/await:
//  await Promise.map(fileNames, function(fileName) {
//      // Promise.map awaits for returned promises as well.
//      return fs.readFileAsync(fileName);
//  });
//  console.log("done");